package com.canoe.text;

import com.canoe.common.CanoeException;
import com.canoe.text.common.TextOrder;

import java.util.Arrays;
import java.util.Objects;

/**
 * 抽象text指令执行器
 *
 * @author: btm
 * @time: 22:00 2020/9/22
 **/
public abstract class AbstractTextOrderProcessor {

    /**
     * text指令抽象执行器
     * @param args text指令参数
     */
    public void process(String... args) {
        if (Objects.isNull(args) || args.length <= 1) {
            throw new CanoeException("Process text order need parameter");
        }
        this.doProcess(Arrays.copyOfRange(args,1,args.length));
    }

    /**
     * 返回当前处理器支持的text指令
     * @return 支持的text指令
     */
    protected abstract TextOrder support();

    /**
     * 对应的text指令处理实现
     * @param args text指令的参数，不包含text指令本身
     */
    protected abstract void doProcess(String... args);
}
